package server

import (
	"encoding/json"
	"fmt"
	"gopkg.in/olahol/melody.v1"
)

// output 全局定义 http 的相关响应
type output struct {
	Code int         `json:"code"`
	Msg  string      `json:"message"`
	Data interface{} `json:"data"`
}

// outputMarshal 直接将 HTTP 的响应转换为 json 字节,懒得处理错误了
func (s *server) outputMarshal(output *output) []byte {
	body, _ := json.Marshal(output)
	return body
}

// SocketErrorOutputMarshal 输出错误,并关闭会话
func (s *server) SocketErrorOutputMarshal(session *melody.Session, str string) {
	// 记录日志
	log.Errorf(str)
	// 发送错误提示给前端
	err := session.Write(s.outputMarshal(&output{
		Code: 500,
		Msg:  str,
		Data: nil,
	}))
	if err != nil {
		log.Errorf(str)
		_ = session.Close()
	}
}

// SocketOutputMarshal 会话输出
func (s *server) SocketOutputMarshal(session *melody.Session, obj interface{}) {
	body, err := json.Marshal(obj)
	if err != nil {
		s.SocketErrorOutputMarshal(session, fmt.Sprintf("会话输出时发生错误 %s", err))
		return
	}
	_ = session.Write(body)
}
